<?php
/**
 * @category 	BoardController.php
 * @author 		Sung Hoon, Cho (akdddnet@gmail.com)
 * @since		2011. 7. 04.
 * @license		BSD License
 * @version		0.1
 */


global $CFG;
require_once $CFG->FW_DIR."/mvc/Controller.php";
require_once $CFG->CLASSES_DIR."/".$CFG->PATH->ADMIN."/board/BoardAdminEB.php";
require_once $CFG->CLASSES_DIR."/".$CFG->PATH->ADMIN."/board/CategoryEB.php";
require_once $CFG->WEBINF_DIR."/utility/BoardUtil.php";

class BoardController extends Controller {
	
	function __construct() {
		parent::__construct(get_class());	// 꼭 부모의 construct를 실행 해줘야됩니다.
	}
	
	function start() {
		global $CFG;
		
		$this->action = $CFG->PATH->WWW."/".$CFG->PATH->ADMIN."/".$this->module;
		
		$this->tpl->assign(array(
			"action"=>$this->action
			,"module"=>$this->module
		));
	}
	
	function index() {
		
		$this->page->class = 'board';
		$this->page->title = '게시판 관리';
		
		$param = new Parameter();
		$page = $param->getParameter("p", 1);
		$ls = $param->getParameter("ls", 20);
		
		
		// 총 게시물 갯수 가져오기
		$tc = $this->dao->getTotalCount(new DTO())->rc;
		
		$dto = new DTO();
		$dto = $this->dao->index($dto);
		
		$list = $dto->list;
		
		if($list) {
			foreach($list as $board) {  
				$board->date = date("Y-m-d", strtotime($board->ba_cdate));
			}
		}
		
		
		$this->tpl->assign(array(
			 "list"=>$list
			,"paging"=>$paging
		));
		
	}
	
	function view($bseq) {
		if(!Common::isNullOrEmpty($bseq)) {
			$dto = new DTO();
			$eb = new BoardAdminEB();
			$eb->ba_seq = $bseq;
			$dto->eb = $eb;
			
			$result = $this->dao->view($dto)->obj;
			
			if(!Common::isNullOrEmpty($result)) {
				
				
				$result->category = getUsed($result->ba_category);
				$result->footlist = getUsed($result->ba_footlist);
				$result->attach = getUsed($result->ba_attach);
				
				$result->date = DateUtil::getTimeToDate($result->ba_cdate);
				
				
				
				$this->tpl->assign(array(
					"result"=>$result	
				));	
			} else {
				Javascript::getAlertWithAjax("존재하지 않는 게시판 입니다.");
					
			}
		} else {
			Javascript::getAlertWithAjax("게시판 아이디가 전달되지 않았습니다.");
		}
	}
	
	
	function add() {
		global $CFG;
		
		$this->page->class = 'board_add';
		$this->page->title = '게시판 추가';
		
		require_once $CFG->FW_DIR."/utility/Dir.php";
		
		// skin 항목 가져오기
		$dir = new Dir();
		$skin = $dir->getDirList($CFG->TEMPLATE_DIR."/skin");
		
		// skin 폴더가 없으면 오류가 나야되긴 하는데.. 일단은 default로 강제로 고정.
		if(Common::isNullOrEmpty($skin)) {
			$skin = array("default");
		}
		
		
		$iconset = $this->getMenuIconSet();
		
		$this->tpl->assign(array(
			"skin"=>$skin
			,"iconset"=>$iconset
		));
	}
	
	
	private function getMenuIconSet() {
		global $CFG; 
		require_once $CFG->FW_DIR."/utility/Dir.php";
		
		// 메뉴에 표시할 아이콘 목록 
		$dir = new Dir();
		$iconset = $dir->getFileList($CFG->WEB_DIR."/images/iconset");
		
		return $iconset;
	}
	
	function doAdd() {
		$param = new Parameter(false);
		
		$module = $this->module;
		
		$validate = new Validate();
		$validate->add("required", $param->getParameter($module."_id"), "게시판 id");
		$validate->add("required", $param->getParameter($module."_name"), "게시판 명");
		$validate->add("required", $param->getParameter($module."_skin"), "스킨");
		$validate->add(array("required", "number"), $param->getParameter($module."_category"), "카테고리");
		$validate->add(array("required", "number"), $param->getParameter($module."_footlist"), "하단리스트");
		$validate->add(array("required", "number"), $param->getParameter($module."_newicontime"), "새글강조기간");
		$validate->add(array("required", "number"), $param->getParameter($module."_attach"), "첨부파일");
		$validate->add(array("required", "number"), $param->getParameter($module."_listing"), "리스팅 갯수");
		$validate->add(array("required", "number"), $param->getParameter($module."_paging"), "페이징 갯수");
		$validate->add(array("required", "number"), $param->getParameter($module."_thumb_width"), "썸네일 가로");
		$validate->add(array("required", "number"), $param->getParameter($module."_thumb_height"), "썸네일 세로");
		
		if($validate->validate()) {
			$dto = new DTO();
			
			$eb = new BoardAdminEB();
			$eb->ba_id = $param->getParameter($module."_id");
			$eb->ba_name = $param->getParameter($module."_name");
			$eb->ba_skin = $param->getParameter($module."_skin");
			$eb->ba_category = $param->getParameter($module."_category");
			$eb->ba_footlist = $param->getParameter($module."_footlist");
			$eb->ba_newicontime = $param->getParameter($module."_newicontime");
			$eb->ba_attach = $param->getParameter($module."_attach");
			$eb->ba_listingnum = $param->getParameter($module."_listing");
			$eb->ba_pagingnum = $param->getParameter($module."_paging");
			$eb->ba_thumwidth = $param->getParameter($module."_thumb_width");
			$eb->ba_thumheight = $param->getParameter($module."_thumb_height");
			
			$dto->eb = $eb;
			
			
			$result = $this->dao->doAdd($dto)->rc;
			if($result > 0) {
				global $CFG;
				
				// 메뉴 등록을 체크 한 경우
				$menu = $param->getParameter($module."_menu");
				$menu_refresh_url = "";
				if($menu) {	
					require_once $CFG->CLASSES_DIR."/admin/menu/MenuController.php";
					require_once $CFG->CLASSES_DIR."/admin/menu/MenuEB.php";
					
					$menu_controller = new MenuController();
				
					$menu_eb = new MenuEB();
					$menu_eb->mn_name = $dto->eb->ba_name;
					$menu_eb->mn_icon = $param->getParameter($module."_icon");
					$menu_eb->mn_url = "/board/bbs/".$dto->eb->ba_id;
					$menu_eb->mn_type = "board";
					$menu_eb->mn_num = $dto->obj;
				
					$dto->eb = $menu_eb;
				
					$result = $menu_controller->doExternalAdd($dto)->rc;
					
					if($result > 0) {		
						require_once $CFG->CLASSES_DIR."/_base/MenuPrivilege.php";
						$menuinfo = MenuPrivilege::getInstance()->refresh();
						
						$menu_refresh_url = $CFG->PATH->WWW."/admin/menu/externalMenuList";
					} else {
						Javascript::getAlertWithAjax("메뉴 등록시 문제가 발생하였습니다.");
					}
				}
				
				
				$message = "정상적으로 추가 되었습니다.";
				$return_url = $CFG->PATH->WWWADMIN."/".$this->module;
				
				if(Common::isAjax()) {
					Javascript::printJSON(array('code'=>Javascript::getSuccessCode(), 'msg'=>$message, 'return_url'=>$return_url, 'menu_refresh_url'=>$menu_refresh_url));
				} else {
					Javascript::getAlertMove($message, $return_url);
				}
				
			} else {
				Javascript::getAlertWithAjax("추가시 문제가 발생하였습니다.");
			}
		} else {
			Javascript::getAlertWithAjax($validate->getErrorMessage());
		}
	}
	
	
	function getID($ids) {
		$validate = new Validate();
		$validate->add(array("required"), $ids, "게시판 아이디");
		if($validate->validate()) {
			$dto = new DTO();
			$eb = new BoardAdminEB();
			$eb->ba_id = $ids;
			$dto->eb = $eb;

			$result = $this->dao->getID($dto)->obj;
			
			
			if($result > 0) {
				Javascript::printJSON(array("code"=>Javascript::getFailureCode(), "msg"=>$ids." 아디는 사용 하실수 없습니다."));
			} else {
				Javascript::printJSON(array("code"=>Javascript::getSuccessCode(), "msg"=>$ids." 사용 가능한 아이디 입니다."));
			}
		} else {
			Javascript::printJSON(array("code"=>Javascript::getFailureCode(), "msg"=>$validate->getErrorMessage()));
		}
	}
	
	function modify($bseq) {
		if(!Common::isNullOrEmpty($bseq)) {
			
			$dto = new DTO();
			$eb = new BoardAdminEB();
			$eb->ba_seq = $bseq;
			$dto->eb = $eb;
			
			$result = $this->dao->view($dto)->obj;
			
			$this->page->class = 'board_add';
			$this->page->title = $result->ba_name.' 게시판 수정';
			
			if(!Common::isNullOrEmpty($result)) {
				$result->date = date("Y-m-d", strtotime($result->ba_date));
				
				
				global $CFG;
				// 현재 게시판이 메뉴로 등록되어 있는지 확인.
				require_once $CFG->CLASSES_DIR."/admin/menu/MenuController.php";
				$menu_controller = new MenuController();
				$menu = $menu_controller->getMenu("board", $bseq);
				
				if(!Common::isNullOrEmpty($menu)) {
					$result->menu = $menu;
				}
				
				
				// 아이콘set가져오기
				$iconset = $this->getMenuIconSet();
				
				
				// skin 항목 가져오기
				require_once $CFG->FW_DIR."/utility/Dir.php";
				$dir = new Dir();
				$skin = $dir->getDirList($CFG->TEMPLATE_DIR."/skin");
		
		
				$this->tpl->assign(array(
					"result"=>$result
					,"iconset"=>$iconset
					,"skin"=>$skin
					
				));	
			} else {
				Javascript::getAlertWithAjax("존재하지 않는 게시판 입니다.");	
			}
		} else {
			Javascript::getAlertWithAjax("게시판 아이디가 전달되지 않았습니다.");
		}
		
	}
	
	
	function doModify() {
		$param = new Parameter(false);
		
		$module = $this->module;
		
		$validate = new Validate();
		$validate->add("required", $param->getParameter($module."_bseq"), "게시판 고유번호");
		$validate->add("required", $param->getParameter($module."_name"), "게시판 명");
		$validate->add("required", $param->getParameter($module."_skin"), "스킨");
		$validate->add(array("required", "number"), $param->getParameter($module."_category"), "카테고리");
		$validate->add(array("required", "number"), $param->getParameter($module."_footlist"), "하단리스트");
		$validate->add(array("required", "number"), $param->getParameter($module."_newicontime"), "새글강조기간");
		$validate->add(array("required", "number"), $param->getParameter($module."_attach"), "첨부파일");
		$validate->add(array("required", "number"), $param->getParameter($module."_listing"), "리스팅 갯수");
		$validate->add(array("required", "number"), $param->getParameter($module."_paging"), "페이징 갯수");
		$validate->add(array("required", "number"), $param->getParameter($module."_thumb_width"), "썸네일 가로");
		$validate->add(array("required", "number"), $param->getParameter($module."_thumb_height"), "썸네일 세로");
		
		if($validate->validate()) {
			$dto = new DTO();
			
			$beb = new BoardAdminEB();
			$beb->ba_seq = $param->getParameter($module."_bseq");
			$beb->ba_name = $param->getParameter($module."_name");
			$beb->ba_skin = $param->getParameter($module."_skin");
			$beb->ba_category = $param->getParameter($module."_category");
			$beb->ba_footlist = $param->getParameter($module."_footlist");
			$beb->ba_newicontime = $param->getParameter($module."_newicontime");
			$beb->ba_attach = $param->getParameter($module."_attach");
			$beb->ba_listingnum = $param->getParameter($module."_listing");
			$beb->ba_pagingnum = $param->getParameter($module."_paging");
			$beb->ba_thumwidth = $param->getParameter($module."_thumb_width");
			$beb->ba_thumheight = $param->getParameter($module."_thumb_height");
			
			$dto->eb = $beb;
			$result = $this->dao->doModify($dto);
			
			
			// 해당 게시판이 메뉴에 등록된지 확인하기 위해서 menu정보 가져오기
			global $CFG;
			require_once $CFG->CLASSES_DIR."/admin/menu/MenuController.php";
			require_once $CFG->CLASSES_DIR."/admin/menu/MenuEB.php";
			$menu_controller = new MenuController();
			
			$meb = new MenuEB();
			$meb->mn_type = "board";
			$meb->mn_num = $beb->ba_seq;
				
			
			// 우선 기존에 등록된 메뉴가 존재하는지 확인
			$menuinfo = $menu_controller->getMenu($meb->mn_type, $meb->mn_num);
			
			
			// menu등록 체크 여부 확인
			$menu = $param->getParameter($module."_menu");
			$menu_refresh_url = $CFG->WWW."/admin/menu/externalMenuList";
			if($menu) {	// 메뉴 등록이 체크 된 경우
				
				$meb->mn_name = $beb->ba_name;
				$meb->mn_icon = $param->getParameter($module."_icon");
				$meb->mn_url = "/board/bbs/".$param->getParameter($module."_baid");
				
				$dto->eb = $meb;
				
				
				// DB에 해당 게시판 메뉴가 등록되어 있지 않은 경우.
				if(Common::isNullOrEmpty($menuinfo)) {
					
					
					
					if($menu_controller->doExternalAdd($dto)->rc > 0) {
						
					} else {
						Javascript::getAlertWithAjax("메뉴 등록시 문제가 발생하였습니다.");
					}
				} else {
					// 메뉴 정보 update
					if($menu_controller->doExternalModify($dto)->rc > 0) {
						
					} else {
						Javascript::getAlertWithAjax("메뉴 등록시 문제가 발생하였습니다.");
					}
				}
				
				require_once $CFG->CLASSES_DIR."/_base/MenuPrivilege.php";
				$menuinfo = MenuPrivilege::getInstance()->refresh();
				
			} else { // 메뉴 등록이 체크 안된 경우 
				if(!Common::isNullOrEmpty($menuinfo)) {
					// 기존에 등록된 메뉴 삭제.
					$dto->eb = $meb;
					
					if($menu_controller->doExternalDelete($dto)->rc > 0) {
						
					} else {
						Javascript::getAlertWithAjax("메뉴 삭제시 문제가 발생하였습니다.");
					}
				}
			}
			
			
			$message = "정상적으로 수정 되었습니다.";
			$return_url = $CFG->PATH->WWWADMIN."/".$this->module."/view/".$beb->ba_seq;
			
			if(Common::isAjax()) {
				Javascript::printJSON(array('code'=>Javascript::getSuccessCode(), 'msg'=>$message, 'return_url'=>$return_url, 'menu_refresh_url'=>$menu_refresh_url));
			} else {
				Javascript::getAlertMove($message, $return_url);
			}
			
		} else {
			Javascript::getAlertWithAjax($validate->getErrorMessage());
		}
	}
	
	function doDelete($id) {
		
		if(!Common::isNullOrEmpty($id)) {
			$dto = new DTO();
			$eb = new BoardAdminEB();
			$eb->ba_id = $id;
			
			$dto->eb = $eb;
			$result = $this->dao->doDelete($dto)->rc;
			if($result > 0) {
				global $CFG;
				
				$message = "삭제 되었습니다.";
				$return_url = $CFG->PATH->WWWADMIN."/".$this->module;
				
				if(Common::isAjax()) {
					Javascript::printJSON(array('code'=>Javascript::getSuccessCode(), 'msg'=>$message, 'return_url'=>$return_url));
				} else {
					Javascript::getAlertMove($message, $return_url);
				}
			} else {
				Javascript::getAlertWithAjax("삭제시 문제가 발생하였습니다.");
			}
		} else {
			Javascript::getAlertWithAjax("게시판 아이디가 전달되지 않았습니다.");
		}
		
	}
	
	
	function category($bseq) {
		if(!Common::isNullOrEmpty($bseq)) {
			
			
			
			$dto = new DTO();
			$eb = new BoardAdminEB();
			$eb->ba_seq = $bseq;
			
			$dto->eb = $eb;
			
			$list = $this->dao->category($dto)->list;
			

			$bid = "";
			if($list) {
				foreach($list as $category) {  
					$category->date = date("Y-m-d", strtotime($category->bc_cdate));
					
					$bid = $category->ba_id;
				}
			}
			
			$this->page->class = "category";
			$this->page->title = $bid.' > 카테고리 관리';
			
			$this->tpl->assign(array(
					 "bid"=>$bid
					,"bseq"=>$bseq
					,"list"=>$list
			));
		} else {
			Javascript::getAlertWithAjax("게시판 아이디가 전달되지 않았습니다.");
		}
	}
	
	
	function categoryAdd($bseq) {
		if(!Common::isNullOrEmpty($bseq)) {	
			
			// bseq으로 전달된 게시판이 존재하는지 확인
			
			$dto = new DTO();
			$eb = new BoardAdminEB();
			$eb->ba_seq = $bseq;
			
			$dto->eb = $eb;

			$result = $this->dao->view($dto)->obj;
			
			
			$this->page->class = "category_add";
			$this->page->title = $result->ba_id.' > 카테고리 추가';
			
			if(!Common::isNullOrEmpty($result)) {
				$this->tpl->assign(array(
					 "bseq"=>$bseq
					,"bid"=>$result->ba_id
					,"script"=>Javascript::getjQueryValidateFile()
				));
			} else {
				Javascript::getAlertWithAjax("존재하지 않는 게시판입니다.");
			}
			
			
		} else {
			Javascript::getAlertWithAjax("게시판 아이디가 전달되지 않았습니다.");
		}
	}
	
	
	function doCategoryAdd() {
		$param = new Parameter(false);
		
		$module = $this->module;
		
		$validate = new Validate();
		$validate->add("required", $param->getParameter($module."_name"), "카테고리명");
		$validate->add("required", $param->getParameter($module."_bseq"), "게시판 고유번호");
		
		if($validate->validate()) {
			$dto = new DTO();
				
			$eb = new CategoryEB();
			$eb->ba_seq = $param->getParameter($module."_bseq");
			$eb->bc_name = $param->getParameter($module."_name");
			
			$dto->eb = $eb;
			
			// 기존에 등록되어 있는 카테고리명이 있는지 확인.
			$overlap = $this->dao->doCategoryOverlap($dto)->rc;
			
			if($overlap == 0) {
				
				$result = $this->dao->doCategoryAdd($dto)->rc;
				if($result > 0) {
					global $CFG;
				
					$message = "정상적으로 추가 되었습니다.";
					$return_url = $CFG->PATH->WWWADMIN."/".$this->module."/category/".$eb->ba_seq;
				
					if(Common::isAjax()) {
						Javascript::printJSON(array('code'=>Javascript::getSuccessCode(), 'msg'=>$message, 'return_url'=>$return_url));
					} else {
						Javascript::getAlertMove($message, $return_url);
					}
				
					//Javascript::getAlertMove("정상적으로 추가 되었습니다.", $CFG->PATH->WWWADMIN."/".$this->module."/category/".$eb->ba_id);
				} else {
					Javascript::getAlertWithAjax("추가시 문제가 발생하였습니다.");
				}
			} else {
				Javascript::getAlertWithAjax($eb->bc_name."로 등록된 카테고리가 존재합니다. \n다른 이름으로 등록해주시기 바랍니다.");
			}
		} else {
			Javascript::getAlertWithAjax($validate->getErrorMessage());
		}
	}
	
	
	
	
	function categoryModify($bseq, $id) {
		
		if(!Common::isNullOrEmpty($bseq) && !Common::isNullOrEmpty($id)) {
			
			$dto = new DTO();
			$eb = new CategoryEB();
			$eb->ba_seq = $bseq;
			$eb->bc_seq = $id;
			
			$dto->eb = $eb;
			
			$result = $this->dao->categoryView($dto)->obj;
			
			$this->page->class = "category_add";
			$this->page->title = $result->bc_name.' 카테고리 수정';
			
			if(!Common::isNullOrEmpty($result)) {
		
				$script = Javascript::getjQueryValidateFile();
				$this->tpl->assign(array(
					"result"=>$result
					,"script"=>$script
					
				));	
			} else {
				Javascript::getAlertWithAjax("존재하지 않는 카테고리 입니다.");	
			}
		} else {
			Javascript::getAlertWithAjax("필요한 값이 전달되지 않았습니다.");
		}
		
	}
	
	
	function doCategoryModify() {
		$param = new Parameter(false);
		
		$module = $this->module;
		
		$validate = new Validate();
		$validate->add("required", $param->getParameter($module."_bseq"), "게시판 고유번호");
		$validate->add(array("required", "number"), $param->getParameter($module."_seq"), "카테고리 고유번호");
		$validate->add("required", $param->getParameter($module."_name"), "카테고리명");
		
		if($validate->validate()) {
			$dto = new DTO();
			
			$eb = new CategoryEB();
			$eb->ba_seq = $param->getParameter($module."_bseq");
			$eb->bc_name = $param->getParameter($module."_name");
			$eb->bc_seq = $param->getParameter($module."_seq");
			
			
			$dto->eb = $eb;
			
			
			$is_overlap = false;
			
			// 카테고리명 중복 확인 
			// 	1. 기존 카테고리명과, 변경하려는 카테고리명이 같은지 확인
			$result = $this->dao->categoryView($dto)->obj;
			// 카테고리명이 같지 않을 경우, 기존에 등록된 카테고리명이 있는지 확인
			if(strcmp($result->bc_name, $eb->bc_name)) {
				// 기존에 등록되어 있는 카테고리명이 있는지 확인.
				$overlap = $this->dao->doCategoryOverlap($dto)->rc;
				
				if($overlap > 0) {
					$is_overlap = true;
				}
			}
			
			if(!$is_overlap) {
				$result = $this->dao->doCategoryModify($dto)->rc;
				//if($result > 0) {
				global $CFG;
				
				$message = "정상적으로 수정 되었습니다.";
				$return_url = $CFG->PATH->WWWADMIN."/".$this->module."/category/".$eb->ba_seq;
				
				if(Common::isAjax()) {
					Javascript::printJSON(array('code'=>Javascript::getSuccessCode(), 'msg'=>$message, 'return_url'=>$return_url));
				} else {
					Javascript::getAlertMove($message, $return_url);
				}
					
				//} else {
					//Javascript::getAlertWithAjax("수정시 문제가 발생하였습니다.");
				//}
			} else {
				Javascript::getAlertWithAjax($eb->bc_name."로 등록된 카테고리가 존재합니다. \n다른 이름으로 등록해주시기 바랍니다.");
			}
		} else {
			Javascript::getAlertWithAjax($validate->getErrorMessage());
		}
	}
	
	
	
	function doCategoryDelete($bseq, $seq) {
		if(!Common::isNullOrEmpty($bseq) && !Common::isNullOrEmpty($seq)) {
			$dto = new DTO();
			$eb = new CategoryEB();
			$eb->ba_seq = $bseq;
			$eb->bc_seq = $seq;
			
			$dto->eb = $eb;
			$result = $this->dao->doCategoryDelete($dto)->rc;
			if($result > 0) {
				global $CFG;
				
				$message = "삭제 되었습니다.";
				$return_url = $CFG->PATH->WWWADMIN."/".$this->module."/category/".$eb->ba_seq;
				
				if(Common::isAjax()) {
					Javascript::printJSON(array('code'=>Javascript::getSuccessCode(), 'msg'=>$message, 'return_url'=>$return_url));
				} else {
					Javascript::getAlertMove($message, $return_url);
				}
				
			} else {
				Javascript::getAlertWithAjax("삭제시 문제가 발생하였습니다.");
			}
		} else {
			Javascript::getAlertWithAjax("필요한 값이 전달되지 않았습니다.");
		}
	}
	
	
} 